#ifndef AUTO_LOCK_H_
#define AUTO_LOCK_H_

#include "Lock.hh"

//
/**
 * \file AutoLock.hh
 * \author  jsk <jsk.jinsubkim@gmail.com>
 * \version 1.0
 *
 * \class AutoLock AutoLock.hh
 *
 * 자동으로 락을 걸고, 해제한다.
 * 
 * Constructor에서 락을 걸고, Deconstructor에서 락을 해제한다. 
 * 즉, 로컬 변수로 락을 걸고 싶은 시점에서 declare 하고, 함수가 종료하는 
 * 시점에서 락을 해제된다. 또 스코프('{}')를 이용해서 특정 범위를 지정할 수 
 * 있다.
 * 
 * 이 클래스의 목적은 크리티컬 섹션 안에서 에러 헨들링으로 goto 문이나 
 * if 문을 사용하여 에러 발생할 때마다 락을 해제하는 코드를 삽입하는 것을 
 * 대체하기 위해서 사용한다. 
 */
class AutoLock
{
public:
	/**
	 * \name AutoLock
	 * 
	 * 락을 잠근다.
	 */
	AutoLock(Lock* Key);
	
	/**
	 * \name ~AutoLock
	 * 
	 * 락을 해제한다.
	 */
	virtual ~AutoLock();
	
protected:
	/**
	 * 할당 받은 락..
	 */
	Lock* AutoKey;
};

#endif //AUTO_LOCK_H_